/*******************************************************************************
 * FilePath    : /Src/BSP/BSP.h
 * Version     : 1.0
 * Brief       :
 * Author      : AndrewHu
 * Company     : Shanghai MacroGiga Electronics CO.,Ltd
 * Email       : Hubinbo@macrogiga.com
 * Date        : 2020-04-03 15:06:14
 * LastEditors : AndrewHu
 * LastEditTime: 2022-02-16 16:06:02
 * Description :
 ******************************************************************************/
#ifndef _BSP_H_
#define _BSP_H_
/* Includes ------------------------------------------------------------------*/
#include <Includes.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
// LED
#define LED_PIN GPIO_Pin_8
#define LED_GPIO GPIOA
// KEY
#define KEY_PIN GPIO_Pin_3
#define KEY_GPIO GPIOC
#define KEY_IRQ GPIOC_IRQn
// SPI
#if defined(MS1793_EVBOARD)
#define SPI_BLE SPI1
#define IRQ_BLE_PIN GPIO_Pin_12
#define IRQ_BLE_PORT GPIOA
#define IRQ_EXTIPORT GPIO_PortSourceGPIOA
#define IRQ_EXTISOURCE GPIO_PinSource12
#define IRQ_EXTI EXTI_Line12
#define IRQ_EXTNUMBER EXTI4_15_IRQn
#define IRQ_HANDLER EXTI4_15_IRQHandler
#define CSN_BLE_PIN GPIO_Pin_8
#define CSN_BLE_PORT GPIOB
#elif defined(MS1791_EVBOARD)
#define SPI_BLE SPI2
#define IRQ_BLE_PIN GPIO_Pin_2
#define IRQ_BLE_PORT GPIOD
#define IRQ_EXTIPORT GPIO_PortSourceGPIOD
#define IRQ_EXTISOURCE GPIO_PinSource2
#define IRQ_EXTI EXTI_Line2
#define IRQ_EXTNUMBER EXTI2_3_IRQn
#define IRQ_HANDLER EXTI2_3_IRQHandler
#define CSN_BLE_PIN GPIO_Pin_15
#define CSN_BLE_PORT GPIOB
#else // default
#define SPI_BLE SPI1
#define IRQ_BLE_PIN GPIO_Pin_12
#define IRQ_BLE_PORT GPIOA
#define IRQ_EXTIPORT GPIO_PortSourceGPIOA
#define IRQ_EXTISOURCE GPIO_PinSource12
#define IRQ_EXTI EXTI_Line12
#define IRQ_EXTNUMBER EXTI4_15_IRQn
#define IRQ_HANDLER EXTI4_15_IRQHandler
#define CSN_BLE_PIN GPIO_Pin_8
#define CSN_BLE_PORT GPIOB
#endif
//运行模式定义
#define RunningMode_Normal 0x00
#define RunningMode_Sleep 0x01
#define RunningMode_Stop 0x02
#define RunningMode_Standby 0x03
//系统时钟定义
#define SystemClock_8M 1
#define SystemClock_48M 2
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function ----------------------------------------------------------*/

/*******************************************************************************
 * Function    : ClearEnterSleepDelay
 * Brief       : 延时进入休眠
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-17 13:28:22
 * Description :
 ******************************************************************************/
void ClearEnterSleepDelay(void);
/*******************************************************************************
 * Function    : User_SystemClock_Config
 * Brief       : 系统时钟初始化函数，初始化之前先复位所有时钟
 * Parameter   : {u8} freq
 * Returns     :
 * Date        : 2020-04-03 15:29:16
 * Description :
 ******************************************************************************/
void User_SystemClock_Config(u8 freq);
/*******************************************************************************
 * Function    : BSP_Init
 * Brief       : 硬件（IO）初始化
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-03 15:56:40
 * Description :
 ******************************************************************************/
void BSP_Init(void);
/*******************************************************************************
 * Function    : setLedPinStatus
 * Brief       : LED亮灭控制
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-03 15:59:24
 * Description :
 ******************************************************************************/
void setLedPinStatus(u8 status);
/*******************************************************************************
 * Function    : getLedPinStatus
 * Brief       : 获取LED灯亮灭状态
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-04 15:20:46
 * Description :
 ******************************************************************************/
u8 getLedPinStatus(void);
/*******************************************************************************
 * Function    : getKeyPinStatus
 * Brief       : 获取按键引脚状态
 * Parameter   : 0-up,1-down
 * Returns     :
 * Date        : 2021-05-08 17:53:55
 * Description :
 ******************************************************************************/
u8 getKeyPinStatus(void);
/*******************************************************************************
 * Function    : ChangeBaudRate
 * Brief       : 更改波特率
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-03 16:52:30
 * Description :
 ******************************************************************************/
void ChangeBaudRate(u32 bRate);
/*******************************************************************************
 * Function    : Mcu_Sleep_Status
 * Brief       : 芯片MCU部分进入低功耗
 * Parameter   : 0x00-sleep,0x01-BLE唤醒，0x02-按键唤醒，0x03-串口唤醒
 * Returns     :
 * Date        : 2020-04-17 13:52:12
 * Description :
 ******************************************************************************/
void Mcu_Sleep_Status(u8 status);
/*******************************************************************************
 * Function    : GetRunningMode
 * Brief       : 获取当前运行模式
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-06 00:41:31
 * Description :
 ******************************************************************************/
u8 GetRunningMode(void);
/*******************************************************************************
 * Function    : GetRunningStatus
 * Brief       : 获取当前运行状态
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-17 13:37:49
 * Description :
 ******************************************************************************/
u8 GetRunningStatus(void);
/*******************************************************************************
 * Function    : SetRunningMode
 * Brief       : 设定运行模式
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-17 13:37:51
 * Description :
 ******************************************************************************/
void SetRunningMode(u8 mode);
/*******************************************************************************
 * Function    : SetRunningStatus
 * Brief       :
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-23 15:53:09
 * Description :
 ******************************************************************************/
void SetRunningStatus(u8 status);
/*******************************************************************************
 * Function    : BSP_Init
 * Brief       : 硬件IO等初始化
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-03 15:56:40
 * Description :
 ******************************************************************************/
void BSP_Init(void);
/*******************************************************************************
 * Function    : IrqMcuGotoSleepAndWakeup
 * Brief       : 运行模式检查及判断
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-03 15:58:39
 * Description :
 ******************************************************************************/
void IrqMcuGotoSleepAndWakeup(void);
/*******************************************************************************
 * Function    :
 * Brief       :
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-17 14:12:48
 * Description :
 ******************************************************************************/
void SysClk8to48(void);
void SysClk48to8(void);
void Error_Handler(void);
/* extern --------------------------------------------------------------------*/
extern void mg_activate(unsigned char value);
extern u8 mg_writeBuf(u8 reg, u8 const *pBuf, u8 len);
#endif
